home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
news
/
inn1.000
/
inn1.4sec-linux-src.tar
/
inn
/
backends
/
cvtbatch.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-02-01
|
3KB
|
160 lines
/* $Revision: 1.3 $
**
** Read file list on standard input and spew out batchfiles.
*/
#include "configdata.h"
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#if defined(DO_NEED_TIME)
#include <time.h>
#endif /* defined(DO_NEED_TIME) */
#include <sys/time.h>
#include "paths.h"
#include "qio.h"
#include "libinn.h"
#include "clibrary.h"
#include "macros.h"
/*
** Print a usage message and exit.
*/
STATIC NORETURN
Usage()
{
(void)fprintf(stderr, "convertbatch usage_error.\n");
exit(1);
}
int
main(ac, av)
int ac;
char *av[];
{
static char SPOOL[] = _PATH_SPOOL;
static char HDR[] = "Message-ID:";
int i;
register QIOSTATE *qp;
register QIOSTATE *artp;
register char *line;
register char *text;
register char *format;
register char *p;
register BOOL Dirty;
struct stat Sb;
/* Parse JCL. */
format = "nm";
while ((i = getopt(ac, av, "w:")) != EOF)
switch (i) {
default:
Usage();
/* NOTREACHED */
case 'w':
for (p = format = optarg; *p; p++) {
switch (*p) {
case FEED_BYTESIZE:
case FEED_FULLNAME:
case FEED_MESSAGEID:
case FEED_NAME:
continue;
}
(void)fprintf(stderr, "Ignoring \"%c\" in -w flag.\n", *p);
}
}
ac -= optind;
av += optind;
if (ac)
Usage();
if (chdir(SPOOL) < 0) {
(void)fprintf(stderr, "batchconvert cant chdir %s, %s\n",
SPOOL, strerror(errno));
exit(1);
}
/* Loop over all input. */
qp = QIOfdopen((int)fileno(stdin), 0);
while ((line = QIOread(qp)) != NULL) {
if (line[0] == '/'
&& line[STRLEN(SPOOL)] == '/'
&& EQn(line, SPOOL, STRLEN(SPOOL)))
line += STRLEN(SPOOL) + 1;
for (p = line; *p; p++)
if (ISWHITE(*p)) {
*p = '\0';
break;
}
if ((artp = QIOopen(line, 0)) == NULL)
/* Non-existant article. */
continue;
/* Read article, looking for Message-ID header. */
while ((text = QIOread(artp)) != NULL) {
if (*text == '\0')
break;
if (*text == 'M' && EQn(text, HDR, STRLEN(HDR)))
break;
if ((*text == 'M' || *text == 'm')
&& caseEQn(text, HDR, STRLEN(HDR)))
break;
}
if (text == NULL || *text == '\0') {
QIOclose(artp);
continue;
}
/* Skip to value of header. */
for (text += STRLEN(HDR); ISWHITE(*text); text++)
continue;
if (*text == '\0') {
QIOclose(artp);
continue;
}
/* Write the desired info. */
for (Dirty = FALSE, p = format; *p; p++) {
switch (*p) {
default:
continue;
case FEED_BYTESIZE:
if (Dirty)
(void)putchar(' ');
if (stat(line, &Sb) < 0)
(void)printf("0");
else
(void)printf("%ld", Sb.st_size);
break;
case FEED_FULLNAME:
if (Dirty)
(void)putchar(' ');
(void)printf("%s/%s", SPOOL, line);
break;
case FEED_MESSAGEID:
if (Dirty)
(void)putchar(' ');
(void)printf("%s", text);
break;
case FEED_NAME:
if (Dirty)
(void)putchar(' ');
(void)printf("%s", line);
break;
}
Dirty = TRUE;
}
if (Dirty)
(void)putchar('\n');
QIOclose(artp);
}
exit(0);
/* NOTREACHED */
}